package com.totcy.atom.view.activity;

import android.os.Build;
import android.os.Bundle;
import android.support.annotation.ColorRes;
import android.support.annotation.LayoutRes;
import android.support.annotation.StringRes;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.totcy.atom.R;
import com.totcy.baselibrary.base.BaseMvpActivity;
import com.totcy.baselibrary.base.mvpbase.BasePresenterImpl;
import com.totcy.baselibrary.base.mvpbase.BaseView;
import com.totcy.baselibrary.utils.StatusBarUtil;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;


/**
 * description: 标题栏基类
 *
 * @author Totcy
 *         date: 2017/10/31 11:38
 *         update: 2017/10/31
 */

public abstract class BaseFullActivity<V extends BaseView,P extends BasePresenterImpl> extends BaseMvpActivity<V,P> {

    /**
     * 布局 容器
     */
    FrameLayout contentView;
    @BindView(R.id.fullBase_progressText)
    TextView fullBaseProgressText;
    @BindView(R.id.fullBase_progressParent)
    LinearLayout fullBaseProgressParent;
    @BindView(R.id.toolbar)
    Toolbar toolbarTitleLayout;

    private Unbinder unbinder;

    @Override
    protected void startInvoke(Bundle savedInstanceState) {
        setContentView(R.layout.layout_full_base_activity);
        initContentView();
        initView();
    }

    private void initContentView() {
        contentView = findViewById(R.id.fullBase_content);
        //解析继承activity中的布局 添加到contentView
        if (getLayoutId() > 0) {
            View view = getLayoutInflater().inflate(getLayoutId(), null);
            contentView.addView(view, 0);
        }
        //ButterKnife 查找所有控件
        unbinder = ButterKnife.bind(this);
        //标题栏控件初始化
        toolbarTitleLayout.setTitle(getTitleName());
        toolbarTitleLayout.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        //沉浸式模式初始化
        initFullScreen();
    }

    /**
     * 沉浸式activity开启（状态栏背景由布局延伸填充色）
     */
    private void initFullScreen() {
        if (isOpenFullScreen()) {
            // 沉浸式模式
            StatusBarUtil.immersive(this, 0xff000000, 1f);
            //因为此界面是白色状态栏，针对于状态栏无法改成黑色主题的版本进行适配
            //这里开始时沉浸式模式时，默认隐藏状态栏背景
            StatusBarUtil.setTranslucentViewVisibility(this, 0xff000000, 1f, false);
            //增加title layout paddingTop
            StatusBarUtil.setPaddingSmart(this, toolbarTitleLayout);
            //增加内容layout paddingTop
        }
        //子类布局在标题栏下
        if (isChildLayoutBelowTitle()) {
            contentView.setPadding(contentView.getPaddingLeft(),
                    contentView.getPaddingTop() + toolbarTitleLayout.getLayoutParams().height,
                    contentView.getPaddingRight(),
                    contentView.getPaddingBottom());
        }

    }

    /**
     * 状态栏黑色模式
     * 一般背景为白色才使用
     * </t></> 1、（白色信号栏、电量……）魅族、小米、6.0以上会设置透明，由布局延伸填充；其他情况，一致处理
     * </t></> 2、（黑色信号栏、电量……）魅族、小米、6.0以上使用黑色主题；其他情况无法改黑色主题，显示状态栏背景黑色
     *
     * @param dark 黑色主题
     */
    public void darkMode(boolean dark) {
        //黑色状态栏
        StatusBarUtil.darkMode(this, dark);
        //如果此界面是白色状态栏，针对于状态栏无法改成黑色主题的版本进行适配
        StatusBarUtil.setTranslucentViewVisibility(this, 0xff000000, 1f, dark);
    }

    /**
     * 设置标题栏背景
     *
     * @param color default colorPrimaryDark
     */
    public void setToolbarTitleLayoutBackground(@ColorRes int color) {
        toolbarTitleLayout.setBackgroundColor(ContextCompat.getColor(this, color));
    }

    /**
     * @return 得到标题栏布局
     */
    public Toolbar getToolbarTitleLayout() {
        return toolbarTitleLayout;
    }

    /**
     * 设置标题
     *
     * @param title
     */
    public void setTitle(String title) {
        //标题栏控件初始化
        toolbarTitleLayout.setTitle(title);
    }

    @Override
    public void setTitle(@StringRes int titleRes) {
        //标题栏控件初始化
        toolbarTitleLayout.setTitle(titleRes);
    }

    public String getToolbarTitle() {
        return toolbarTitleLayout.getTitle().toString();
    }

    /**
     * 设置标题栏阴影
     *
     * @param elevation dp
     */
    public void setTitleLayoutElevation(int elevation) {
        //设置阴影
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            toolbarTitleLayout.setElevation((getResources().getDisplayMetrics().density * elevation + 0.5f));
        }
    }

    @Override
    public void showProgress(String message) {
        if (fullBaseProgressParent != null) {
            fullBaseProgressParent.setVisibility(View.VISIBLE);
            fullBaseProgressText.setText(TextUtils.isEmpty(message) ? getString(R.string.text_loading) : message);
        }
    }

    @Override
    public void dismissProgress() {
        if (fullBaseProgressParent != null) {
            fullBaseProgressParent.setVisibility(View.GONE);
        }
    }

    /**
     * @return 沉浸式模式 默认开启,子类可以重写不开启此模式
     */
    public boolean isOpenFullScreen() {
        return true;
    }

    /**
     * @return 子类layout默认添加到标题栏下面，增加了一个paddingtTop 标题栏的距离
     */
    public boolean isChildLayoutBelowTitle() {
        return true;
    }

    /**
     * @return 获取标题名
     */
    public abstract String getTitleName();

    /**
     * 布局Id 解析添加到 layout/layout_full_base_activity.xml中
     *
     * @return 子activity layout id
     */
    public abstract
    @LayoutRes
    int getLayoutId();

    /**
     * 初始化View
     */
    public abstract void initView();

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (unbinder != null) {
            unbinder.unbind();
        }
    }

}
